<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-15">
	<TITLE>Pyig, geometria interattiva e Python</TITLE>
	<META NAME="GENERATOR" CONTENT="OpenOffice.org 1.9.104  (Linux)">
	<META NAME="AUTHOR" CONTENT="Daniele Zambelli">
	<META NAME="CREATED" CONTENT="20050115;21443800">
	<META NAME="CHANGED" CONTENT="20060620;11082100">
	<META NAME="DESCRIPTION" CONTENT="Geometria interattiva in Python. Interactiv geometry for Python.">
	<META NAME="KEYWORDS" CONTENT="Geometria interattiva Python Interactiv geometry Python">
	<META NAME="autore" CONTENT="Daniele Zambelli">
	<STYLE>
	<!--
		@page { size: 21cm 29.7cm; margin: 2cm }
		TD P { margin-bottom: 0.21cm }
		TD P.western { font-family: "Helvetica", sans-serif; font-weight: medium }
		H1 { margin-bottom: 0.21cm; color: #b84747 }
		H1.western { font-family: "Helvetica", sans-serif; font-size: 16pt }
		H1.cjk { font-family: "Mincho"; font-size: 16pt }
		H1.ctl { font-family: "Tahoma", "Lucidasans", "Lucida Sans", "Arial Unicode MS"; font-size: 16pt }
		P { margin-bottom: 0.21cm }
		P.western { font-family: "Helvetica", sans-serif; font-weight: medium }
		H2 { margin-bottom: 0.21cm; color: #008080 }
		H2.western { font-family: "Helvetica", sans-serif; font-size: 14pt; font-style: italic }
		H2.cjk { font-family: "Mincho"; font-size: 14pt; font-style: italic }
		H2.ctl { font-size: 14pt; font-style: italic }
		H3 { margin-top: 0.22cm; margin-bottom: 0.11cm; color: #800080 }
		H3.western { font-family: "Helvetica", sans-serif; font-size: 12pt; font-style: italic }
		H3.cjk { font-family: "Mincho" }
		TH P { margin-bottom: 0.21cm }
		TH P.western { font-family: "Helvetica", sans-serif; font-style: italic }
		TH P.cjk { font-style: italic }
		TH P.ctl { font-style: italic }
		KBD { color: #808000 }
	-->
	</STYLE>
</HEAD>
<BODY LANG="it-IT" DIR="LTR">
<P CLASS="western" ALIGN=CENTER><FONT COLOR="#94006b"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=7 STYLE="font-size: 44pt">Pyig<BR><FONT SIZE=5 STYLE="font-size: 20pt">2.01</FONT></FONT></FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=CENTER><FONT COLOR="#94476b"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=6 STYLE="font-size: 22pt">Geometria
interattiva in Python</FONT></FONT></FONT></P>
<P CLASS="western" ALIGN=CENTER><FONT COLOR="#944794"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3>(Daniele
Zambelli 2006)</FONT></FONT></FONT></P>
<P CLASS="western" ALIGN=CENTER><FONT COLOR="#944794"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3>www.verona.linux.it<BR>daniele.zambelli@inwind.it</FONT></FONT></FONT></P>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm">In questo
testo ci sono:<BR>un'introduzione alla geometria interattiva con
<KBD>Python<BR></KBD>un'introduzione all'uso della libreria <KBD>pyig.py</KBD>.</P>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm">La
libreria <KBD>pyig.py</KBD> mette a disposizione alcuni strumenti
essenziali per <BR>realizzare disegni geometrici modificabili poi con
l'uso del mouse.</P>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm">&Egrave;
inserita nel pacchetto <KBD>pygraph</KBD> che contiene anche le
librerie:<BR><KBD>pyturtle</KBD> per la grafica della tartaruga,
<BR><KBD>pyplot</KBD> per il disegno di funzioni piane, <BR><KBD>pyig</KBD>
per la geometria interattiva <BR>e <KBD>pycart</KBD> la libreria che
serve da base per tutte le altre.</P>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm"><KBD>pygraph</KBD>
&egrave; anche inserito all'interno della distribuzione
<BR><KBD>EduKnoppix</KBD>.<BR><FONT COLOR="#944794">http://www.eduknoppix.org</FONT></P>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<DIV ID="Indice generale1" DIR="LTR" STYLE="background: transparent">
	<P CLASS="western">0. <A HREF="#Introduzione">Introduzione</A> <BR>1.
	<A HREF="#Uso">Uso</A> <BR>2. <A HREF="#Un problema">Un Problema</A>
	<BR>3. <A HREF="#Argomenti opzionali">Argomenti opzionali</A> <BR>4.
	<A HREF="#L'oggetto pyigplane">L'oggetto pyigplane</A> <BR>5. <A HREF="#Classi pyigpy">Classi
	pyig.py</A> <BR>5. <A HREF="#Conclusione">Conclusione</A> <BR>7.
	<A HREF="#Licenza">Licenza</A> <BR>8. <A HREF="#Bibliografia">Bibliografia</A>
		</P>
</DIV>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<H1 CLASS="western"><A NAME="Introduzione"></A>0. Introduzione</H1>
<P CLASS="western" STYLE="margin-bottom: 0cm"><KBD>pyig</KBD> &egrave;
una libreria che permette di creare con il linguaggio <KBD>Python</KBD>
figure geometriche che possono essere deformate trascinando i punti
base con il mouse.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><KBD>Python</KBD> &egrave;
un moderno linguaggio di programmazione caratterizzato da una
sintassi molto essenziale. Permettendo di concentrare l'attenzione
sul problema pi&ugrave; che sulla sintassi, <KBD>Python</KBD>, &egrave;
un linguaggio adatto all'apprendimento della programmazione e
dell'informatica.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">L'unione tra la potenza
del linguaggio e l'espressivit&agrave; della geometria interattiva
fanno di <KBD>pyig.py</KBD> un utile strumento per capire e imparare
la geometria. 
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Pu&ograve; essere
interessante utilizzare <KBD>Python</KBD> e <KBD>pyig</KBD> nella
scuola (secondaria di primo e secondo grado):</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Helvetica, sans-serif">Questo
manuale descrive:</FONT></P>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">come usare
	<KBD>pyig.py</KBD>,</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">quali sono le sue
	funzionalit&agrave;.</P>
</UL>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">In questo testo c'&egrave;
una velocissima introduzione all'uso della libreria <KBD>pyig</KBD>.
Si presuppone che questa sia stata installata secondo la procedura
descritta nel file <KBD>readme.txt</KBD> e sia funzionante.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Nel <A HREF="#Uso"><B>paragrafo
1</B></A> spiego come eseguire gli esempi e come visualizzarne il
sorgente.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Nel <A HREF="#Un problema"><B>paragrafo
2</B></A> illustro passo passo la soluzione a un semplice problema.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Nel <A HREF="#Argomenti opzionali"><B>paragrafo
3</B></A> elenco gli argomenti opzionali nella creazione degli
oggetti e mostro i vari modi in cui si possono usare.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Nel <A HREF="#L'oggetto pyigplane"><B>paragrafo
4</B></A> descrivo l'oggetto pyigplane che viene creato quando viene
caricata la libreria.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Nel <A HREF="#Classi pyigpy"><B>paragrafo
5</B></A> elenco le varie classi fornite dalla libreria, classi che
permettono di costruire punti, rette, circonfernze, segmenti, angoli
poligoni, etichette, calcoli...</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Prima di procedere
mettiamo in chiaro un aspetto critico: la licenza. Tutto il materiale
che trovate qui &egrave; frutto del mio lavoro e della mia fatica. In
particolare tutti gli errori, le imprecisioni e le sciocchezze che
potete scoprire in questo testo sono di mia propriet&agrave;
(intellettuale). Perci&ograve;, prima di pensare di riutilizzare
questo testo per i vostri scopi, andate a leggervi le condizioni di
licenza al <A HREF="#Licenza"><B>paragrafo 7</B></A>.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Lo scopo di questo
testo &egrave; assolutamente introduttivo, non &egrave; possibile
presentare in modo esauriente il linguaggio Python o la grafica della
tartaruga in poche pagine. La bibliografia finale, <A HREF="#Bibliografia"><B>paragrafo
8</B></A>, pu&ograve; dare qualche indicazione per continuare
l'esplorazione della grafica della Tartaruga e di Python.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Helvetica, sans-serif">Buon
divertimento!</FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<H1 CLASS="western"><A NAME="Uso"></A>1. Uso</H1>
<P CLASS="western">Per poter usare <KBD>pyig</KBD> bisogna aver
installato la libreria <KBD>pygraph</KBD> (vedi il file <KBD>readme.txt</KBD>
e il manuale scritto nel formato OOo1):</P>
<H2 CLASS="western">1.2. Esecuzione di un programma</H2>
<P CLASS="western" STYLE="margin-bottom: 0cm">Prima di scrivere il
nostro primo programma possiamo eseguire quelli gi&agrave; scritti da
altri. Il pacchetto <KBD>pygraph</KBD> contiene, oltre alle librerie
e alla documentazione, anche una serie di esempi graduali contenuti
nella directory</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><KBD>examples</KBD></P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">I file d'esempio sono
abbondantemente commentati (anzi alcuni sono formati quasi solo da
commenti) quindi sono pensati non solo per essere eseguiti, ma anche
per essere letti e modificati.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Vediamo come eseguirli.
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<H3 CLASS="western">Da IDLE (Windows e Linux)</H3>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Clic destro del
	mouse sull'icona del file,</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">si sceglie poi,
	dal menu contestuale, di aprire con IDLE il file,</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">infine dal menu
	della finestra che contiene l'esempio si esegue Run - Run Module (o
	si preme il tasto &lt;F5&gt;).</P>
</UL>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<H3 CLASS="western">Da terminale (Linux)</H3>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Si apre un
	terminale nella directory che contiene gli esempi (ad esempio, se
	usiamo KDE, con il clic destro del mouse poi Azioni - Apri terminale
	qui,</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">nel terminale si
	scrive il nome del programma da eseguire seguito dal tasto invio (ad
	esempio: 1040Poligoni.py)</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Pu&ograve; darsi
	che Linux richieda di essere pi&ugrave; precisi e di scrivere
	./1040Poligoni.py</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Dato che quello
	che scriviamo nel terminale &egrave; il nome di un programma che
	deve essere eseguito, &egrave; necessario che il file abbia i
	permessi di esecuzione. Se non li ha, sempre da KDE: clic destro del
	mouse sul file da eseguire, poi: Propriet&agrave; - Permessi &ndash;
	Eseguibile.</P>
</UL>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<H1 CLASS="western"><A NAME="Un problema"></A>2. Un problema</H1>
<P CLASS="western">Affrontiamo il nostro primo problema:</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western"><I>Scrivere il programma che disegni un triangolo
con i vertici nei punti (0; -4), (-5; -5) e (1; 6).</I></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Il modo pi&ugrave; semplice e sicuro per scrivere
un programma &egrave;... copiarlo da qualcuno che l'ha gi&agrave;
scritto.</P>
<P CLASS="western">Predisponiamo una cartella dove mettere i nostri
lavori, i sorgenti dei nostri programmi. La mia si chiama: <KBD>sorgenti</KBD>.
In questa cartella copiamo il file <KBD>1000Fogliovuoto.py</KBD>.
Rinominiamo questo file in <KBD>primo.py</KBD>, attenti
all'estensione importante soprattutto in Windows.</P>
<P CLASS="western">Ora apriamo il file con IDLE: clic destro - Edit
with IDLE. Se in Linux, al file non &egrave; associato IDLE,
possiamo, da KDE:</P>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">selezionare il
	file</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">dal menu Modifica
	- Modifica tipo di file</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Ordine di
	preferenza delle applicazioni - Aggiungi idle-python2.4</P>
</UL>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Una volta aperto e salvato il file, se premiamo il
tasto &lt;F5&gt; vediamo che il programma funziona, disegna un piano
cartesiano vuoto, non fa niente, ma lo fa bene!.</P>
<P CLASS="western">Incominciamo a modificarlo:</P>
<P CLASS="western">Le prime due righe vanno bene cos&igrave;. La
prima:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#!/usr/bin/env
python</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">sta ad indicare al Sistema Operativo che questo
file contiene un programma <KBD>Python</KBD>. La seconda:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#
-*- coding: iso-8859-15 -*-</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">invita <KBD>Python</KBD> a non fare troppo lo
schizzinoso e ad accettare anche le lettere accentate.</P>
<P CLASS="western">La cornicetta che segue, contiene delle
informazioni che possono sembrare inutili, finch&eacute; scriviamo il
programma, ma che si rivelano molto importanti a distanza di qualche
mese o qualche anno:</P>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Linguaggio o
	libreria usata,</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Nome del file</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Titolo del
	programma</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Autore</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Licenza</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Anno</P>
</UL>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Modifichiamola per adattarla alle nostre esigenze:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#-----------------------------pyig--------------------primo.py--#</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Triangolo
dati i vertici&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#--(Nome
autore)---- ----------GPL-----------------------2005---#</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Il programma da cui siamo partiti contiene solo
due istruzioni significative, cancelliamo tutti i commenti e lasciamo
le due righe: 
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">from
pyig import *</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">pyigplane.mainloop()</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">La prima linea dice a <KBD>Python</KBD> che dalla
libreria <KBD>pyig</KBD> deve caricare tutto ci&ograve; che vi &egrave;
definito. La seconda dice a <KBD>Python</KBD> che ho finito di
disegnare e la finestra grafica deve rispondere agli eventi provocati
dal mouse.</P>
<P CLASS="western">Tra queste due righe dovremo scrivere il nostro
programma. Per&ograve; prima di procedere vediamo che tutto funzioni
ancora: <KBD>&lt;F5&gt;</KBD>. Se appaiono gli assi cartesiani,
facciamo un bel respiro e rilassiamoci un po'.</P>
<P CLASS="western">Bene, ora passiamo al problema.</P>
<P CLASS="western">Ora in questo programma dobbiamo scrivere le
istruzioni per disegnare un triangolo. Vediamo una possibile
descrizione della soluzione:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Il
triangolo &egrave; formato da</FONT></FONT></P>
<P CLASS="western" STYLE="margin-left: 1.06cm; margin-bottom: 0cm; font-weight: medium">
<FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">tre lati
e questi sono dei segmenti</FONT></FONT></P>
<P CLASS="western" STYLE="margin-left: 2.12cm; margin-bottom: 0cm; font-weight: medium">
<FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">che hanno
per estremi i tre vertici dati</FONT></FONT></P>
<P CLASS="western" STYLE="margin-left: 2.12cm; margin-bottom: 0cm; font-weight: medium">
<FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">quindi
dobbiamo creare i tre vertici, che sono punti</FONT></FONT></P>
<P CLASS="western" STYLE="margin-left: 1.06cm; margin-bottom: 0cm; font-weight: medium">
<FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">poi i tre
lati che sono segmenti</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">e
cos&igrave; si ottiene il triangolo</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Aggiungiamo, tra le due istruzioni che avevamo
salvato precedentemente, le seguenti righe:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#
Creazione dei vertici</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">a=Point(0,
-4)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">b=Point(-5,
-5)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">c=Point(1,
6)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">#
Creazione dei lati</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(a,
b)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(b,
c)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(c,
a)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Le linee che iniziano con il carattere <KBD>#</KBD>
sono dei commenti. Ricordiamoci che &egrave; molto importante
inserire dei commenti significativi nei programmi che scriviamo.</P>
<P CLASS="western">Ora, premendo il tasto <KBD>&lt;F5&gt;</KBD> pu&ograve;
succedere una delle due cose:</P>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">O appare la
	finestra grafica di <KBD>pyig</KBD> con il triangolo.</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">O appare una
	sgradevole scritta rossa.</P>
</UL>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Nel secondo caso dobbiamo sforzarci di leggere la
scritta e di capire perch&eacute; <KBD>Python</KBD> non &egrave;
stato in grado di eseguire il nostro programma.</P>
<P CLASS="western">Tra le varie informazioni che appaiono c'&egrave;:</P>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">il motivo:
	nell'ultima riga,</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">il numero della
	linea del programma che <KBD>Python</KBD> non &egrave; stato in
	grado di interpretare.</P>
</UL>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Se vengono segnalati degli errori bisogna tornare
nella finestra del programma e correggerli finch&eacute; <KBD>Python</KBD>,
assistito da <KBD>pyig</KBD>, non riesce a produrre il disegno che ci
eravamo prefissi.</P>
<P CLASS="western">In particolare:</P>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">dobbiamo
	ricordarci che <KBD>Python</KBD> distingue tra lettere Maiuscole e
	Minuscole, quindi &quot;<KBD>Point</KBD>&quot; e &quot;<KBD>point</KBD>&quot;,
	per <KBD>Python</KBD> non sono la stessa cosa.</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">controllate di
	aver chiuso tutte le parentesi aperte e di aver usato la
	punteggiatura giusta.</P>
</UL>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Ora che sappiamo scrivere i nostri programmi,
approfondiamo la conoscenza degli oggetti &ldquo;<KBD>pyig.py</KBD>&rdquo;...</P>
<P CLASS="western"><BR><BR>
</P>
<H1 CLASS="western"><A NAME="Argomenti opzionali"></A>3. Argomenti
opzionali</H1>
<P CLASS="western">Nel problema precedente abbiamo costruito tre
oggetti della classe <KBD>Point</KBD> e tre oggetti della classe
<KBD>Segment</KBD>.</P>
<P CLASS="western">Per creare un punto dobbiamo passargli due
argomenti, due numeri che vengono messi nei parametri <KBD>x</KBD> e
<KBD>y</KBD> del costruttore dell'oggetto. Nel caso del punto i due
numeri rappresentano le coordinate.</P>
<P CLASS="western">Per creare un segmento dobbiamo passargli due
punti che vengono messi nei parametri <KBD>point0</KBD> e <KBD>point1</KBD>
dell'oggetto. Nel caso del segmento i due punti rappresentano gli
estremi.</P>
<P CLASS="western">Se tentassimo di costruire un punto senza
fornirgli due numeri, <KBD>pyig.py</KBD> non saprebbe cosa fare e si
fermerebbe segnalandoci il suo problema. E lo stesso avverrebbe se
invece di numeri passassimo come coordinate delle stringhe o degli
altri oggetti. Un discorso analogo vale per la classe <KBD>Segment</KBD>.</P>
<P CLASS="western">Quindi <KBD>Point</KBD> ha due parametri che
devono essere riempiti obbligatoriamente da due numeri, <KBD>Segment</KBD>
ha due parametri che devono essere riempiti obbligatoriamente da due
punti.</P>
<P CLASS="western">Il costruttore di ogni oggetto di <KBD>pyig.py</KBD>
deve essere chiamato con degli argomenti obbligatori, ma pu&ograve;
anche essere chiamato con degli argomenti opzionali. Se non vengono
specificati, questi argomenti assumono un valore predefinito (detto
valore di &ldquo;default&rdquo;).</P>
<P CLASS="western">La seguente tabella riporta i parametri opzionali
e il loro significato:</P>
<TABLE WIDTH=552 BORDER=1 CELLPADDING=4 CELLSPACING=3 STYLE="page-break-inside: avoid">
	<COL WIDTH=137>
	<COL WIDTH=388>
	<THEAD>
		<TR VALIGN=TOP>
			<TD WIDTH=137>
				<P CLASS="western" ALIGN=CENTER><I>parametro</I></P>
			</TD>
			<TD WIDTH=388>
				<P CLASS="western" ALIGN=CENTER><I>significato</I></P>
			</TD>
		</TR>
	</THEAD>
	<TBODY>
		<TR VALIGN=TOP>
			<TD WIDTH=137>
				<P CLASS="western"><KBD>visible</KBD></P>
			</TD>
			<TD WIDTH=388>
				<P CLASS="western">L'oggetto viene visualizzato oppure no.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=137>
				<P CLASS="western"><KBD>color</KBD></P>
			</TD>
			<TD WIDTH=388>
				<P CLASS="western">Colore dell'oggetto.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=137>
				<P CLASS="western"><KBD>width</KBD></P>
			</TD>
			<TD WIDTH=388>
				<P CLASS="western">Dimensioni della rappresentazione
				dell'oggetto.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=137>
				<P CLASS="western"><KBD>name</KBD></P>
			</TD>
			<TD WIDTH=388>
				<P CLASS="western">&Egrave; una stringa che rappresenta il nome
				dell'oggetto.</P>
			</TD>
		</TR>
	</TBODY>
</TABLE>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">La seguente tabella riporta i parametri e i loro
possibili valori. Il primo valore &egrave; quello predefinito:</P>
<TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=3 STYLE="page-break-inside: avoid">
	<COL WIDTH=57*>
	<COL WIDTH=199*>
	<THEAD>
		<TR VALIGN=TOP>
			<TD WIDTH=22%>
				<P CLASS="western" ALIGN=CENTER><I>parametro</I></P>
			</TD>
			<TD WIDTH=78%>
				<P CLASS="western" ALIGN=CENTER><I>valore predefinito, altri
				valori</I></P>
			</TD>
		</TR>
	</THEAD>
	<TBODY>
		<TR VALIGN=TOP>
			<TD WIDTH=22%>
				<P CLASS="western"><KBD>visible</KBD></P>
			</TD>
			<TD WIDTH=78%>
				<P CLASS="western">True, False</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=22%>
				<P CLASS="western"><KBD>color</KBD></P>
			</TD>
			<TD WIDTH=78%>
				<P CLASS="western"><KBD>&ldquo;<FONT FACE="Bitstream Vera Serif, serif">#0000ff&rdquo;</FONT></KBD><FONT FACE="Bitstream Vera Serif, serif">,
				qualunque altra stringa nel formato <KBD>&ldquo;#rrggbb&rdquo;</KBD>
				dove: <KBD>rr</KBD>, <KBD>gg</KBD>, <KBD>bb</KBD> sono tre numeri
				esadecimali di due cifre che indicano rispettivamente le
				componenti rossa, verde, blu del colore.</FONT></P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=22%>
				<P CLASS="western"><KBD>width</KBD></P>
			</TD>
			<TD WIDTH=78%>
				<P CLASS="western"><KBD>1</KBD>, qualunque altro numero naturale.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=22%>
				<P CLASS="western"><KBD>name</KBD></P>
			</TD>
			<TD WIDTH=78%>
				<P CLASS="western"><KBD>&quot;&quot;</KBD> (stringa vuota),
				qualunque altra stringa.</P>
			</TD>
		</TR>
	</TBODY>
</TABLE>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western"><KBD>Python</KBD> mette a disposizione molti modi
per passare i parametri ad una funzione e <KBD>pyig.py</KBD> aggiunge
dei metodi per modificare gli attributi degli oggetti o il loro
comportamento predefinito.</P>
<P CLASS="western"><BR><BR>
</P>
<H2 CLASS="western">Argomenti per posizione</H2>
<P CLASS="western">Nei costruttori dei diversi oggetti i parametri
sono scritti in un ben preciso ordine, sempre lo stesso. e possono
essere riempiti con argomenti passati nello stesso ordine. A esempio
se voglio un &quot;punto&quot; di coordinate (2; 3), visibile, rosso,
grande, di nome Pippo, posso crearlo con la seguente istruzione:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">a=Point(2,
3, True, &quot;#ff0000&quot;, 20, &quot;Pippo&quot;)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Cos&igrave;, un &quot;segmento&quot; che congiunge
i punti a e b, largo 4, verde, di nome &quot;Pluto&quot;, lo creo con
la seguente istruzione:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">s=Segment(a,
b, True, &quot;#00ff00&quot;, 4, &quot;Pluto&quot;)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Questo meccanismo &egrave; comodo se devo passare
pochi argomenti e questi sono i primi della lista. Ad esempio se
voglio costruire due punti e un segmento invisibili posso dare i
comandi:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">a=Point(-2,
1, False)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">b=Point(3,
3, False)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">s=Segment(a,
b, False)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Ma presenta alcuni inconvenienti: 
</P>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">dobbiamo scrivere
	tutti gli argomenti anche se siamo interessati a modificarne solo ad
	alcuni,</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">dobbiamo
	ricordarci l'ordine in cui scriverli,</P>
</UL>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Per superare questi problemi possiamo utilizzare
il seguente metodo.</P>
<P CLASS="western"><BR><BR>
</P>
<H2 CLASS="western">Argomenti per nome</H2>
<P CLASS="western"><KBD>Python</KBD> mette a disposizione un modo per
passare argomenti ad una funzione secondo la seguente sintassi:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">funzione(parametro1=1argomento1,
parametro2=argomento2, ...)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Cos&igrave; se voglio costruire un &quot;punto&quot;
grosso rosso, un altro grosso verde uniti da un segmento grosso
giallo:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">a=Point(-2,
1, width=10, color=&quot;#ff0000&quot;)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">b=Point(3,
3, color=&quot;#00ff00&quot;, width=10)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">s=Segment(a,
b, width=5, color=&quot;#ffff00&quot;)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Se nella chiamata di una funzione alcuni argomenti
sono passati per posizione altri per nome, quelli per posizione
devono essere i primi, gli argomenti per nome possono essere passati
in qualunque ordine (vedi esempio precedente).</P>
<P CLASS="western"><BR><BR>
</P>
<H2 CLASS="western">Argomenti predefiniti</H2>
<P CLASS="western"><KBD>pyig.py</KBD> ci mette a disposizione anche
un altro strumento utile in certi casi: ci d&agrave; la possibilit&agrave;
di modificare il comportamento predefinito. Supponiamo, ad un certo
punto della nostra costruzione di dover disegnare tutti elementi con
un certo argomento, ad esempio voglio che i prossimi argomenti siano
tutti invisibili, perch&eacute; mi servono solo per la costruzione di
altri elementi e non devono essere visualizzati. Ad esempio se voglio
disegnare un triangolo verde e con lo spessore dei lati uguale a 4,
ma senza che siano presenti i vertici:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">a=Point(-2,
1, visible=False)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">b=Point(3,
-3, visible=False)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">c=Point(2,
3, visible=False)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(a,
b, color=&quot;#00ff00&quot;, width=4)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(b,
c, color=&quot;#00ff00&quot;, width=4)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(c,
a, color=&quot;#00ff00&quot;, width=4)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Se gli elementi sono molti, specificare per
ciascuno: visible=True pu&ograve; risultare piuttosto noioso, &egrave;
possibile modificare il comportamento predefinito di <KBD>pyig.py</KBD>
usando i metodi dell'oggetto <KBD>pyigplane</KBD>. Il precedente
problema pu&ograve; essere risolto in questo modo:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">pyigplane.setvisible(False)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">a=Point(-2,
1)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">b=Point(3,
-3)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">c=Point(2,
3)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">pyigplane.setvisible(True)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">pyigplane.setcolor(&quot;#00ff00&quot;)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">pyigplane.setwidth(4)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(a,
b)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(b,
c)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">Segment(c,
a)</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">pyigplane permette di modificare i valori
predefiniti di visibilit&agrave;, colore e spessore con i metodi:
<KBD>setvisible</KBD>, <KBD>setcolor</KBD> e <KBD>setwidth</KBD>.</P>
<P CLASS="western"><BR><BR>
</P>
<H2 CLASS="western">Metodi dell'oggetto</H2>
<P CLASS="western"><KBD>pyig.py</KBD> fornisce un quarto modo per
determinare il valore degli attributi dei suoi oggetti: usare un
metodo dell'oggetto stesso. Questo modo permette di separare la
costruzione dell'oggetto dalla definizione dei suoi attributi.</P>
<P CLASS="western">Applichiamo il metodo <KBD>setcolor(c)</KBD> al
seguente problema:</P>
<P CLASS="western"><I>Realizzare un triangolo con vertici e lati di
larghezza maggiore del normale con colori casuali.</I></P>
<P CLASS="western"><KBD>Python</KBD> ha un modulo apposito dedicato
alla generazione di numeri casuali: <KBD>random</KBD> utilizzandolo
possiamo scrivere una funzione che produce una stringa che
rappresenta un colore casuale:</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">import
random</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">def
coloreacaso():</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><FONT COLOR="#808000">&nbsp;&nbsp;&nbsp;&nbsp;<FONT FACE="Bitstream Vera Sans Mono">return
&quot;#%02x%02x%02x&quot; % (random.randrange(256), </FONT></FONT>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><FONT COLOR="#808000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT FACE="Bitstream Vera Sans Mono">random.randrange(256),
</FONT></FONT>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><FONT COLOR="#808000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT FACE="Bitstream Vera Sans Mono">random.randrange(256))</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">a=Point(-2,
1)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">b=Point(3,
-3)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">c=Point(2,
3)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">l1=Segment(a,
b)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">l2=Segment(b,
c)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">l3=Segment(c,
a)</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm; font-weight: medium"><FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">for
e in (a, b, c, l1, l2, l3):</FONT></FONT></P>
<P CLASS="western" STYLE="margin-left: 1.06cm; margin-bottom: 0cm; font-weight: medium">
<FONT COLOR="#808000"><FONT FACE="Bitstream Vera Sans Mono">e.setcolor(coloreacaso())</FONT></FONT></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">Ognuno dei metodi precedenti ha vantaggi e
svantaggi nei termini di sinteticit&agrave; e di chiarezza, sta al
programmatore scegliere caso per caso, il metodo pi&ugrave; adatto.</P>
<P CLASS="western">Visto come determinare gli attributi degli oggetti
<KBD>pyig.py</KBD> vediamo <B>quali</B> oggetti possiamo creare.</P>
<P CLASS="western"><BR><BR>
</P>
<H1 CLASS="western"><A NAME="L'oggetto pyigplane"></A>4. L'oggetto
pyigplane</H1>
<P CLASS="western" STYLE="margin-bottom: 0cm">L'oggetto <KBD>pyigplane</KBD>
rappresenta una finestra su un piano cartesiano nel quale si possono
disegnare oggetti geometrici. I metodi messi a disposizione da
<KBD>pyigplane</KBD> sono i seguenti:</P>
<TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=3 STYLE="page-break-inside: avoid">
	<COL WIDTH=72*>
	<COL WIDTH=184*>
	<THEAD>
		<TR VALIGN=TOP>
			<TH WIDTH=28%>
				<P CLASS="western">metodo</P>
			</TH>
			<TH WIDTH=72%>
				<P CLASS="western">descrizione</P>
			</TH>
		</TR>
	</THEAD>
	<TBODY>
		<TR VALIGN=TOP>
			<TD WIDTH=28%>
				<P CLASS="western"><KBD>setwidth(w)</KBD></P>
			</TD>
			<TD WIDTH=72%>
				<P CLASS="western">Dove <KBD>w</KBD> &egrave; un numero, imposta
				la larghezza predefinita degli oggetti a <KBD>w</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=28%>
				<P CLASS="western"><KBD>setcolor(c)</KBD></P>
			</TD>
			<TD WIDTH=72%>
				<P CLASS="western">Dove <KBD>c</KBD> &egrave; una stringa nel
				formato <KBD>&ldquo;#rrggbb&rdquo;</KBD> dove <KBD>rr</KBD>, <KBD>gg</KBD>
				e <KBD>bb</KBD> sono numeri esadecimali di due cifre che
				rappresentano rispettivamente le componenti rossa, verde, blu del
				colore. <KBD>setcolor(c)</KBD> imposta il colore predefinito
				degli oggetti a <KBD>c</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=28%>
				<P CLASS="western"><KBD>setvisible(v)</KBD></P>
			</TD>
			<TD WIDTH=72%>
				<P CLASS="western">Dove <KBD>v</KBD> &egrave; un valore <KBD>bouleano</KBD>
				(<KBD>True</KBD> o <KBD>False</KBD>), dopo aver eseguito
				<KBD>setvisible(True)</KBD> i nuovi oggetti creati saranno
				visibili, dopo aver eseguito <KBD>setvisible(False)</KBD> i nuovi
				oggetti creati saranno non visibili.</P>
			</TD>
		</TR>
	</TBODY>
</TABLE>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<H1 CLASS="western"><A NAME="Classi pyigpy"></A>5. Classi pyig.py</H1>
<P CLASS="western" STYLE="margin-bottom: 0cm"><KBD>pyig.py</KBD>
fornisce un certo numero di classi che hanno un corrispondente nella
finestra grafica. Come gi&agrave; visto nel paragrafo <B>3. Argomenti
opzionali</B> il costruttore di ogni classe richiede alcuni argomenti
obbligatori e altri opzionali. Quelli opzionali sono stati descritti
in precedenza, di seguito riporter&ograve; solo quelli specifici per
ogni classe.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<H2 CLASS="western">Punti</H2>
<TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=3 STYLE="page-break-inside: avoid">
	<COL WIDTH=100*>
	<COL WIDTH=156*>
	<THEAD>
		<TR VALIGN=TOP>
			<TH WIDTH=39%>
				<P CLASS="western">classe</P>
			</TH>
			<TH WIDTH=61%>
				<P CLASS="western">descrizione</P>
			</TH>
		</TR>
	</THEAD>
	<TBODY>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Point(x, y)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Punto libero. <KBD>x</KBD> &egrave; l'ascissa
				e <KBD>y</KBD> l'ordinata del punto. Questo oggetto &egrave; la
				base di ogni costruzione, dai punti liberi dipendono,
				direttamente o indirettamente, gli altri oggetti grafici. Quando
				il puntatore del mouse si sovrappone ad un punto libero questo
				cambia colore. Trascinando un punto libero, con il mouse, tutti
				gli oggetti che dipendono da questo, verranno modificati. 
				</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>MidPoints(point0, point1)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Punto medio di due punti.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>MidPoint(segment)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Punto medio di un segmento.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>LineLineIntersection(line0, line1)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Punto intersezione tra due rette</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>LineCircleIntersection(line, circle,
				witch)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Punto di intersezione tra una retta e una
				circonferenza. <KBD>witch</KBD> pu&ograve; valere <KBD>1</KBD> o
				<KBD>-1</KBD> e indica quale delle due intersezioni creare.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>CircleCircleIntersection(circle0,
				circle1, witch)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Punto di intersezione tra due circonferenze.
				<KBD>witch</KBD> pu&ograve; valere <KBD>1</KBD> o <KBD>-1</KBD> e
				indica quale delle due intersezioni creare.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>ConstrainedPoint(obj, parameter)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Punto vincolato ad una linea. <KBD>obj</KBD>
				pu&ograve; essere una retta (anche una semiretta o un segmento) o
				una circonferenza.</P>
			</TD>
		</TR>
	</TBODY>
</TABLE>
<H2 CLASS="western">Rette, semirette, segmenti</H2>
<TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=3 STYLE="page-break-inside: avoid">
	<COL WIDTH=100*>
	<COL WIDTH=156*>
	<THEAD>
		<TR VALIGN=TOP>
			<TH WIDTH=39%>
				<P CLASS="western">classe</P>
			</TH>
			<TH WIDTH=61%>
				<P CLASS="western">descrizione</P>
			</TH>
		</TR>
	</THEAD>
	<TBODY>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Line(point0, point1)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Retta passante per due punti, <KBD>point0</KBD>
				e <KBD>point1</KBD> sono i due punti per cui passa la retta.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Ray(point0, point1)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Semiretta passante per due punti, <KBD>point0</KBD>
				&egrave; l'origine e <KBD>point1</KBD> &egrave; un punto della
				semiretta.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Segment(point0, point1)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Segmento che ha per estremi i punti <KBD>point0</KBD>
				e <KBD>point1</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Orthogonal(line, point)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Retta perpendicolare alla retta <KBD>line</KBD>
				passante per il punto <KBD>point</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Parallel(line, point)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Retta parallela alla retta <KBD>line</KBD>
				passante per il punto <KBD>point</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Bisector(angle)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Retta bisettrice dell'angolo <KBD>angle</KBD>.</P>
			</TD>
		</TR>
	</TBODY>
</TABLE>
<H2 CLASS="western">Circonferenze, poligoni, angoli</H2>
<TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=3 STYLE="page-break-inside: avoid">
	<COL WIDTH=100*>
	<COL WIDTH=156*>
	<THEAD>
		<TR VALIGN=TOP>
			<TH WIDTH=39%>
				<P CLASS="western">classe</P>
			</TH>
			<TH WIDTH=61%>
				<P CLASS="western">descrizione</P>
			</TH>
		</TR>
	</THEAD>
	<TBODY>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Circle(center, point, intern=&quot;&quot;)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Circonferenza di centro <KBD>center</KBD> e
				passante per <KBD>point</KBD>. Se <KBD>intern</KBD> &egrave; una
				stringa che contiene un colore l'interno del cerchio viene
				colorato con quel colore.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>CircleCR(center, radius, intern=&quot;&quot;)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Circonferenza di centro <KBD>center</KBD> e
				con il raggio congruente al segmento <KBD>radius</KBD>. Se <KBD>intern</KBD>
				&egrave; una stringa che contiene un colore l'interno del cerchio
				viene colorato con quel colore.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Polygon(points, intern=&quot;&quot;)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Poligono dati i vertici. <KBD>points</KBD> &egrave;
				una sequenza di punti. Se <KBD>intern</KBD> &egrave; una stringa
				che contiene un colore l'interno del poligono viene colorato con
				quel colore.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Polygonal(points)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Poligonale dati i vertici. <KBD>points</KBD> &egrave;
				una sequenza di punti. 
				</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>CurviLine(points)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Linea curva determinata dalla sequenza di
				punti contenuta in <KBD>points</KBD>. 
				</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Angle(point0, vertex, point1)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Angolo dati tre punti, il secondo punto
				rappresenta il vertice. Il verso di costruzione dell'angolo &egrave;
				quello antiorario.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>AngleRA(ray, angle)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Angolo dati una semiretta e un altro angolo.</P>
			</TD>
		</TR>
	</TBODY>
</TABLE>
<H2 CLASS="western">Testi, etichette</H2>
<TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=3 STYLE="page-break-inside: avoid">
	<COL WIDTH=100*>
	<COL WIDTH=156*>
	<THEAD>
		<TR VALIGN=TOP>
			<TH WIDTH=39%>
				<P CLASS="western">classe</P>
			</TH>
			<TH WIDTH=61%>
				<P CLASS="western">descrizione</P>
			</TH>
		</TR>
	</THEAD>
	<TBODY>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Text(x, y, text)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Testo posizionato nel punto di coordinate <KBD>x</KBD>,
				<KBD>y</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Label(obj, x, y, text)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Etichetta di un oggetto, cio&egrave; un testo
				legato all'oggetto <KBD>obj</KBD>, posizionato alla distanza di <KBD>x</KBD>
				pixel in orizzontale e di <KBD>y</KBD> pixel in verticale.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>VarText(point, x, y, text, variables)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western" STYLE="margin-bottom: 0cm">Testo variabile
				posizionato nel punto di coordinate <KBD>x</KBD>, <KBD>y</KBD>.</P>
				<P CLASS="western" STYLE="margin-bottom: 0cm">Il testo contiene
				dei &quot;segnaposto&quot; che verranno sostituiti con i valori
				prodotti dai dati presenti nel parametro <KBD>variables</KBD>. 
				</P>
				<P CLASS="western">In genere i &quot;segnaposto&quot; saranno
				nella forma: &quot;<KBD>%s</KBD>&quot; che indica a Python di
				convertire in stringa il risultato prodotto dal dato.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>VarLabel(obj, x, y, text, variables)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Etichetta variabile: &egrave; legata
				all'oggetto <KBD>obj</KBD> e al cambiare del disegno si modifica
				riflettendo i diversi valori dei dati contenuti in <KBD>variables</KBD>.</P>
			</TD>
		</TR>
	</TBODY>
</TABLE>
<H2 CLASS="western">Dati</H2>
<TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=3 STYLE="page-break-inside: avoid">
	<COL WIDTH=100*>
	<COL WIDTH=156*>
	<THEAD>
		<TR VALIGN=TOP>
			<TH WIDTH=39%>
				<P CLASS="western">classe</P>
			</TH>
			<TH WIDTH=61%>
				<P CLASS="western">descrizione</P>
			</TH>
		</TR>
	</THEAD>
	<TBODY>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Coords(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Coordinate dell'oggetto <KBD>obj</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Xcoord(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Ascissa dell'oggetto <KBD>obj</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Ycoord(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Ordinata dell'oggetto <KBD>obj</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Length(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Lunghezza, <KBD>obj</KBD> deve essere un
				segmento.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Equation(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Equazione di <KBD>obj</KBD>. <KBD>obj</KBD>
				deve essere un segmento, una retta o una semiretta.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Slope(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Pendenza di <KBD>obj</KBD>. <KBD>obj</KBD>
				deve essere un segmento, una retta o una semiretta.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Perimeter(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Lunghezza del contorno di <KBD>obj</KBD>. <KBD>obj</KBD>
				deve essere una circonferenza o un poligono.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Surface(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Area della superficie di <KBD>obj</KBD>. <KBD>obj</KBD>
				deve essere una circonferenza o un poligono.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>NumOfSides(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Numero di lati del poligono <KBD>obj</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Extent(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Ampiezza dell'angolo <KBD>obj</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Type(obj)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">Tipo dell'oggetto <KBD>obj</KBD>.</P>
			</TD>
		</TR>
		<TR VALIGN=TOP>
			<TD WIDTH=39%>
				<P CLASS="western"><KBD>Calc(...)</KBD></P>
			</TD>
			<TD WIDTH=61%>
				<P CLASS="western">TODO</P>
			</TD>
		</TR>
	</TBODY>
</TABLE>
<H1 CLASS="western"><A NAME="Conclusione"></A>6. Conclusione</H1>
<P CLASS="western" STYLE="margin-bottom: 0cm">Per ulteriori
informazioni si pu&ograve; consultare il manuale (<KBD>pygraph.sxw</KBD>
scritto in formato OpenOffice.org1). In quel documento si trovano
anche svariati esempi per dell'uso di ogni classe. Altri esempi si
trovano nella dir <KBD>examples</KBD>.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Molte sono ancora le
funzioni interessanti da implementare per rendere pi&ugrave; utile
questo strumento nella didattica della geometria, ma prima di
ampliarlo conviene lasciar passare un po' di tempo e provarlo sul
&ldquo;campo&rdquo;.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Ho scritto queste
librerie e questa documentazione nella speranza che qualcuno possa
trovarle utili e divertenti.</P>
<P CLASS="western" STYLE="margin-bottom: 0cm">Mi far&agrave; molto
piacere ricevere :</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Consigli</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Critiche</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Complimenti</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Collaborazioni</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">...</P>
</UL>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm"><FONT SIZE=6 STYLE="font-size: 28pt"><FONT COLOR="#dc2300">Buon
divertimento con </FONT></FONT><KBD><FONT SIZE=6 STYLE="font-size: 28pt">pyig.py</FONT></KBD><FONT SIZE=6 STYLE="font-size: 28pt"><FONT COLOR="#dc2300">!</FONT></FONT></P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<H1 CLASS="western"><A NAME="Licenza"></A>7. Licenza</H1>
<P CLASS="western" STYLE="margin-bottom: 0cm">Pur assumendomi tutte
le responsabilit&agrave; sulle sciocchezze che ho scritto in questo
testo, devo riconoscere che, tutto quello che so, mi &egrave; stato
trasmesso con passione, generosit&agrave; e pazienza da altri.
Cosciente di questo, metto a disposizione di chiunque sia interessato
quello che ho scritto, nella speranza che possa essere utile.<BR>Le
librerie pycart, pyplot e pyturtle, tutti gli esempi che le
completano, il manuale e gli altri testi che ne spiegano l'uso,
vengono cedute tutte con licenza GNU Free Documentation License
(<A HREF="http://www.gnu.org/">http://www.gnu.org</A>) che vi
permette di:</P>
<OL START=0>
	<LI><P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3>Utilizzare
	questo documento per qualunque scopo, senza vincoli sul suo
	utilizzo.</FONT></FONT></P>
	<LI><P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3>Modificare
	il documento e adattarlo alle vostre esigenze.</FONT></FONT></P>
	<LI><P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3>Ridistribuire
	copie del documento originale o modificato.</FONT></FONT></P>
</OL>
<P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><B>con le seguenti
condizioni:</B></P>
<P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=0>
	<LI><P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3>Sia
	sempre distribuito con questa licenza anche ogni lavoro derivato, in
	tutto o in parte, da esso.</FONT></FONT></P>
	<LI><P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3>Sia
	citato l'autore originale e il sito di provenienza.</FONT></FONT></P>
	<LI><P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3>Non
	venga snaturato nella sostanza o nella forma il contenuto originale.</FONT></FONT></P>
</OL>
<P CLASS="western" ALIGN=LEFT STYLE="margin-bottom: 0cm"><BR>
</P>
<H1 CLASS="western"><A NAME="Bibliografia"></A>8. Bibliografia</H1>
<UL>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">In molti testi di
	didattica si parla di geometria interattiva appoggiandosi a pogrammi
	liberi o pi&ugrave; spesso proprietari. Molte delle proposte che vi
	si trovano possono essere utilizzate con <KBD>pyig.py</KBD>.</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Un manualetto
	sulle librerie <KBD>pycart.py</KBD>, <KBD>pyplot.py</KBD> e
	<KBD>pyturtle.py</KBD>, si trova in <KBD>/opt/doc/pygraph/doc/</KBD>.</P>
	<LI><P CLASS="western" STYLE="margin-bottom: 0cm">Per quanto
	riguarda Python il sito di riferimento &egrave; <A HREF="www.python.org">www.python.org</A>
	mentre il riferimento italiano <A HREF="http://www.python.it/">www.python.it</A>.
	Qui si possono trovare manuali, articoli, presentazioni, esempi e
	link a materiali di tutti i tipi originali, tradotti o in inglese.</P>
</UL>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
</BODY>
</HTML>